]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
extensionSystem: Improve error formatting
authorPhilip Chimento <philip.chimento@gmail.com>
Wed, 3 Jan 2024 00:29:08 +0000 (16:29 -0800)
committerFlorian Müllner <fmuellner@gnome.org>
Thu, 4 Jan 2024 19:12:32 +0000 (20:12 +0100)
This exposes the formatted error with stack trace and proper location of
SyntaxErrors over the bus, instead of just the message.

<https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3041>

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3041>

js/misc/errorUtils.js
js/ui/extensionSystem.js

index c2bc1c794d7c8cd5f70cabdadf31fb4700d66358..369a06b02dc6b25a9813efc370dad56befead79c 100644 (file)
@@ -14,8 +14,8 @@ function formatExceptionStack(error) {
     return `\n\nStack trace:\n${indentedStack}`;
 }
 
-function formatExceptionWithCause(error, seenCauses) {
-    let fmt = formatExceptionStack(error);
+function formatExceptionWithCause(error, seenCauses, showStack) {
+    let fmt = showStack ? formatExceptionStack(error) : '';
 
     const {cause} = error;
     if (!cause)
@@ -39,9 +39,12 @@ function formatExceptionWithCause(error, seenCauses) {
  * location where a SyntaxError was thrown into account.
  *
  * @param {Error} error The error to format
+ * @param {object} options Formatting options
+ * @param {boolean} options.showStack Whether to show the stack trace (default
+ *   true)
  * @returns {string} The formatted string
  */
-export function formatError(error) {
+export function formatError(error, {showStack = true} = {}) {
     try {
         let fmt = `${error}`;
         if (error === null || typeof error !== 'object')
@@ -49,12 +52,13 @@ export function formatError(error) {
 
         if (error instanceof SyntaxError) {
             fmt += formatSyntaxErrorLocation(error);
-            fmt += formatExceptionStack(error);
+            if (showStack)
+                fmt += formatExceptionStack(error);
             return fmt;
         }
 
         const seenCauses = new Set([error]);
-        fmt += formatExceptionWithCause(error, seenCauses);
+        fmt += formatExceptionWithCause(error, seenCauses, showStack);
         return fmt;
     } catch (e) {
         return `(could not display error: ${e})`;
index 0ff2828094b9e7ddd242fc0fea2968112fb9035f..ddadb384e6ef62c21755e623d1f357fc6a6d235e 100644 (file)
@@ -9,6 +9,7 @@ import * as Signals from '../misc/signals.js';
 
 import * as Config from '../misc/config.js';
 import * as ExtensionDownloader from './extensionDownloader.js';
+import {formatError} from '../misc/errorUtils.js';
 import {ExtensionState, ExtensionType} from '../misc/extensionUtils.js';
 import * as FileUtils from '../misc/fileUtils.js';
 import * as Main from './main.js';
@@ -359,8 +360,7 @@ export class ExtensionManager extends Signals.EventEmitter {
         if (!extension)
             return;
 
-        const message = error instanceof Error
-            ? error.message : error.toString();
+        const message = formatError(error, {showStack: false});
 
         console.debug(`Changing state of extension ${uuid} to ERROR`);
         extension.error = message;